#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n;
vector<int> e[N];
multiset<pair<int,int>> s[N];
multiset<int> ss[N];
void dfs(int no,int fa){
    for(int to:e[no]){
        if(to==fa)continue;
        dfs(to,no);
        if(s[to].size()>s[no].size())swap(s[no],s[to]);
        for(auto it:s[to])s[no].insert(it);
        s[to].clear();
        if(ss[to].size()>ss[no].size())swap(ss[no],ss[to]);
        for(auto it:ss[to])ss[no].insert(it);
        ss[to].clear();
    }
    if(s[no].size()==0){
        s[no].insert({1,0});
    }
    else if(s[no].size()==1){
        auto it=*s[no].begin();
        s[no].erase(s[no].find(it));
        s[no].insert({it.first,1});
        s[no].insert({1,0});
        ss[no].insert(it.first);
    }
    else{
        int sum=0,fl=0;
        auto it=*s[no].rbegin();
        sum+=it.first;
        fl|=it.second;
        if(it.second)ss[no].erase(ss[no].find(it.first));
        s[no].erase(s[no].find(it));
        it=*s[no].rbegin();
        sum+=it.first;
        fl|=it.second;
        if(it.second)ss[no].erase(ss[no].find(it.first));
        s[no].erase(s[no].find(it));
        //cout<<no<<' '<<sum<<'\n';
        s[no].insert({sum+1,fl});
        if(fl)ss[no].insert(sum+1);
        if(s[no].begin()->first>1){
            for(int it:ss[no]){
                s[no].erase(s[no].find({it,1}));
                s[no].insert({it,0});
            }
            ss[no].clear();
        }
    }
}
int main(){
    freopen("bird.in","r",stdin);
    freopen("bird.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<n;++i){
        int u,v;
        cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    dfs(1,0);
    cout<<s[1].rbegin()->first+(s[1].rbegin()->second);
    return 0;
}
